﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Inventario_HardSoft.ADO;
using System.Data;
using System.Windows.Forms;

namespace Inventario_HardSoft.Controlador
{
    class Ctrl_H_Asist_Rep
    {
        ConexionDataContext conexion;

        public Ctrl_H_Asist_Rep()
        {
            conexion =new ConexionDataContext();
        }

        internal List<USUARIO> getList_Asistentes()
        {
            var consulta = conexion.USUARIO.Where(u => u.REPARADOR == 1).OrderBy(us => us.NOMBRE).ToList<USUARIO>();
            return consulta.ToList<USUARIO>();               
        }

        internal void getList_ProblemasxAsistente(DataGridView dg, string nomb_asist)
        {
            int i = 1;
            var consulta = from p in conexion.PROBLEMA
                            join pt in conexion.PROBLEMA_TIPO on p.IDTIPOPROBLEMA equals pt.IDTIPOPROBLEMA
                            join eq in conexion.EQUIPO on p.IDEQUIPO equals eq.IDEQUIPO
                            join u  in conexion.USUARIO on eq.IDUSUARIO equals u.IDUSUARIO 
                            where p.REPARADORNAME == nomb_asist && pt.IDTIPOPROBLEMA=="TIP_01"
                            select new
                            {
                                eq.TIPOEQUIPO,
                                p.TICKET,
                                p.FECHAREGISTROENTRADA,
                                p.FECHAENTREGA,
                                p.FECHAREGISTROSALIDA,
                                pt.TIPO_PROBLEMA,
                                p.DESCRIPCION,
                                p.SOLUCION,
                                p.ESTADO,
                                p.TIEMPOREPARACION,
                                p.PRIORIDAD, 
                                u.NOMBRE,
                                p.IDPROBLEMA, 
                                p.REPARADORRESPONSABLE 
                            };

            dg.Rows.Clear();

            foreach (var c in consulta)
            {
                object[] obj = new object[] {i,c.TICKET ?? string.Empty,c.TIPOEQUIPO ?? string.Empty, c.TIPO_PROBLEMA ?? string.Empty,
                                            c.FECHAREGISTROENTRADA.GetValueOrDefault(DateTime.MinValue),
                                            c.FECHAENTREGA.GetValueOrDefault(DateTime.MinValue),
                                            c.FECHAREGISTROSALIDA.GetValueOrDefault(DateTime.MinValue),
                                            c.DESCRIPCION ?? string.Empty,c.ESTADO ?? string.Empty,c.SOLUCION ?? string.Empty,c.TIEMPOREPARACION ?? string.Empty,this.cambiaPrioridad(c.PRIORIDAD.Value),String.Empty,c.NOMBRE,c.IDPROBLEMA,c.REPARADORRESPONSABLE};

                obj[4] = ((DateTime)obj[4]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[4]).ToShortDateString();
                obj[5] = ((DateTime)obj[5]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[5]).ToShortDateString();
                obj[6] = ((DateTime)obj[6]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[6]).ToShortDateString();
                obj[15] = obj[15] == null ? String.Empty : obj[15].ToString();
                dg.Rows.Add(obj);
                i++;
            }            
        }

        internal void getList_ProblemasxAsistenteSw(DataGridView dgsw, string nomb_asist)
        { 
            int i = 1;
            var consulta = from pr in conexion.PROBLEMA
                           join pt in conexion.PROBLEMA_TIPO on pr.IDTIPOPROBLEMA equals pt.IDTIPOPROBLEMA
                           join eq in conexion.EQUIPO on pr.IDEQUIPO equals eq.IDEQUIPO
                           join prg in conexion.PROGRAMA on pr.IDPROGRAMA equals prg.IDPROGRAMA
                           join u in conexion.USUARIO on eq.IDUSUARIO equals u.IDUSUARIO 
                           where pr.REPARADORNAME == nomb_asist && pt.IDTIPOPROBLEMA == "TIP_02"
                           select new
                           {
                               eq.TIPOEQUIPO,
                               pr.TICKET,
                               pr.FECHAREGISTROENTRADA,
                               pr.FECHAENTREGA,
                               pr.FECHAREGISTROSALIDA,
                               pt.TIPO_PROBLEMA,
                               pr.DESCRIPCION,
                               pr.SOLUCION,
                               pr.ESTADO,
                               pr.TIEMPOREPARACION,
                               prg.NOMBREPROGRAMA,
                               pr.PRIORIDAD,
                               u.NOMBRE, 
                               pr.IDPROBLEMA, 
                               pr.REPARADORRESPONSABLE 
                           };
            dgsw.Rows.Clear();
            foreach (var c in consulta)
            {
                object[] obj = new object[] {i,c.TICKET ?? string.Empty,c.TIPOEQUIPO ?? string.Empty, c.TIPO_PROBLEMA  ?? string.Empty,
                                             c.FECHAREGISTROENTRADA.GetValueOrDefault(DateTime.MinValue),
                                             c.FECHAENTREGA.GetValueOrDefault(DateTime.MinValue),
                                             c.FECHAREGISTROSALIDA.GetValueOrDefault(DateTime.MinValue),
                                             c.DESCRIPCION ?? string.Empty,c.ESTADO ?? string.Empty,c.SOLUCION ?? string.Empty,
                                             c.TIEMPOREPARACION ?? string.Empty,c.NOMBREPROGRAMA ?? string.Empty,
                                             this.cambiaPrioridad(c.PRIORIDAD.Value),c.NOMBRE ?? string.Empty,
                                             c.IDPROBLEMA ?? string.Empty,c.REPARADORRESPONSABLE ?? string.Empty};

                obj[4] = ((DateTime)obj[4]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[4]).ToShortDateString();
                obj[5] = ((DateTime)obj[5]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[5]).ToShortDateString();
                obj[6] = ((DateTime)obj[6]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[6]).ToShortDateString();
                obj[15] = obj[15] == null ? String.Empty : obj[15].ToString(); 
                dgsw.Rows.Add(obj);
                i++;
            }
        }

        internal void getList_ProblemasRechazados(DataGridView dgsw)
        { 
            int i = 1;
            var consulta = from pr in conexion.PROBLEMA
                           join pt in conexion.PROBLEMA_TIPO on pr.IDTIPOPROBLEMA equals pt.IDTIPOPROBLEMA
                           join eq in conexion.EQUIPO on pr.IDEQUIPO equals eq.IDEQUIPO                          
                           join u in conexion.USUARIO on eq.IDUSUARIO equals u.IDUSUARIO 
                           
                           join prg in conexion.PROGRAMA on pr.IDPROGRAMA equals prg.IDPROGRAMA into tempMemory
                           from kkk in tempMemory.DefaultIfEmpty()

                           where pr.ESTADO == "rechazado" && pt.IDTIPOPROBLEMA == "TIP_01"    
                           select new
                           {
                               eq.TIPOEQUIPO,
                               pr.TICKET,
                               pr.FECHAREGISTROENTRADA,
                               pr.FECHAENTREGA,
                               pr.FECHAREGISTROSALIDA,
                               pt.TIPO_PROBLEMA,
                               pr.DESCRIPCION,
                               pr.SOLUCION,
                               pr.ESTADO,
                               pr.TIEMPOREPARACION,
                               kkk.NOMBREPROGRAMA,
                               pr.PRIORIDAD,
                               u.NOMBRE,
                               pr.IDPROBLEMA,
                               pr.REPARADORRESPONSABLE,
                               pr.DESCRIPRECHAZO 
                           };
            dgsw.Rows.Clear();
            foreach (var c in consulta)
            {
                object[] obj = new object[] {i,c.TICKET ?? string.Empty,c.TIPOEQUIPO ?? string.Empty, c.TIPO_PROBLEMA ?? string.Empty,
                                             c.FECHAREGISTROENTRADA.GetValueOrDefault(DateTime.MinValue),
                                             c.FECHAENTREGA.GetValueOrDefault(DateTime.MinValue),
                                             c.FECHAREGISTROSALIDA.GetValueOrDefault(DateTime.MinValue),
                                             c.DESCRIPCION ?? string.Empty,c.ESTADO ?? string.Empty,c.SOLUCION ?? string.Empty,
                                             c.TIEMPOREPARACION ?? string.Empty,c.NOMBREPROGRAMA ?? string.Empty,                                           
                                             this.cambiaPrioridad(c.PRIORIDAD.Value),c.NOMBRE ?? string.Empty,c.IDPROBLEMA ?? string.Empty,
                                             c.REPARADORRESPONSABLE ?? string.Empty,c.DESCRIPRECHAZO ?? string.Empty};
                obj[4] = ((DateTime)obj[4]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[4]).ToShortDateString();
                obj[5] = ((DateTime)obj[5]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[5]).ToShortDateString();
                obj[6] = ((DateTime)obj[6]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[6]).ToShortDateString();
                obj[11] = obj[11] == null ? String.Empty : obj[11].ToString();
                obj[15] = obj[15] == null ? String.Empty : obj[15].ToString();
                obj[16] = obj[16] == null ? String.Empty : obj[16].ToString();
                dgsw.Rows.Add(obj);
                i++;
            }   
        }


        private string cambiaPrioridad(int pri)
        {
            string result = string.Empty;

            switch (pri)
            {
                case 1:
                    result = "Alta";
                    break;
                case 2:
                    result = "Media";
                    break;
                case 3:
                    result = "Baja";
                    break;
            }
            return result;
        }

        internal void getList_ProblemasRechazadosSw(DataGridView dgsw)
        {
            int i = 1;
            var consulta = from pr in conexion.PROBLEMA
                           join pt in conexion.PROBLEMA_TIPO on pr.IDTIPOPROBLEMA equals pt.IDTIPOPROBLEMA
                           join eq in conexion.EQUIPO on pr.IDEQUIPO equals eq.IDEQUIPO
                           join u in conexion.USUARIO on eq.IDUSUARIO equals u.IDUSUARIO
                           join prg in conexion.PROGRAMA on pr.IDPROGRAMA equals prg.IDPROGRAMA into tempMemory
                           from kkk in tempMemory.DefaultIfEmpty()

                           where pr.ESTADO == "rechazado" && pt.IDTIPOPROBLEMA == "TIP_02"
                           select new
                           {
                               eq.TIPOEQUIPO,
                               pr.TICKET,
                               pr.FECHAREGISTROENTRADA,
                               pr.FECHAENTREGA,
                               pr.FECHAREGISTROSALIDA,
                               pt.TIPO_PROBLEMA,
                               pr.DESCRIPCION,
                               pr.SOLUCION,
                               pr.ESTADO,
                               pr.TIEMPOREPARACION,
                               kkk.NOMBREPROGRAMA,
                               pr.PRIORIDAD,
                               u.NOMBRE,
                               pr.IDPROBLEMA,
                               pr.REPARADORRESPONSABLE,
                               pr.DESCRIPRECHAZO
                           };
            dgsw.Rows.Clear();
            foreach (var c in consulta)
            {
                object[] obj = new object[] {i,c.TICKET ?? string.Empty ,c.TIPOEQUIPO ?? string.Empty, c.TIPO_PROBLEMA ?? string.Empty,
                                             c.FECHAREGISTROENTRADA.GetValueOrDefault(DateTime.MinValue),
                                             c.FECHAENTREGA.GetValueOrDefault(DateTime.MinValue),
                                             c.FECHAREGISTROSALIDA.GetValueOrDefault(DateTime.MinValue),
                                             c.DESCRIPCION ?? string.Empty,c.ESTADO ?? string.Empty,c.SOLUCION ?? string.Empty,c.TIEMPOREPARACION ?? string.Empty,
                                             c.NOMBREPROGRAMA ?? string.Empty,                                           
                                             this.cambiaPrioridad(c.PRIORIDAD.Value),c.NOMBRE ?? string.Empty,c.IDPROBLEMA ?? string.Empty,
                                             c.REPARADORRESPONSABLE ?? string.Empty,c.DESCRIPRECHAZO ?? string.Empty};
                obj[4] = ((DateTime)obj[4]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[4]).ToShortDateString();
                obj[5] = ((DateTime)obj[5]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[5]).ToShortDateString();
                obj[6] = ((DateTime)obj[6]).Equals(DateTime.MinValue) ? String.Empty : ((DateTime)obj[6]).ToShortDateString();
                obj[11] = obj[11] == null ? String.Empty : obj[11].ToString();
                obj[15] = obj[15] == null ? String.Empty : obj[15].ToString();
                obj[16] = obj[16] == null ? String.Empty : obj[16].ToString();

                dgsw.Rows.Add(obj);
                i++;
            }  
        }
    }
}